跳到主要内容

dbexport 和 dbimport 实用程序

dbexportdbimport 实用程序向存储在磁盘或磁带中的文本文件导入或导出数据库。

dbexport 实用程序将整个数据库卸载到文本文件并创建模式文件。可以通过 dbimport,使用该模式文件在另一个 GBase 8s 环境中重新创建该数据库模式,并且您还可以编辑模式文件以修改 dbimport 创建的数据库。

dbimport 实用程序用于创建数据库,它使用磁带或磁盘上文本文件中的数据来装入数据库。输入文件由用来重新创建数据库的模式文件和包含数据库数据的数据文件组成。通常使用 dbexport 实用程序生成输入文件,但您也可以使用任何适当格式的输入文件。

注意

导入数据库时,请使用与创建该数据库时使用的相同的环境变量和配置参数,否则可能得到预料之外的结果。

  • 如果影响分段存储表达式、检查约束、触发器或用户定义的例程的任何环境变量或配置参数设置与最初创建这些数据库对象时不同, 则可能无法使用dbimport实用程序准确地重新产生数据库。
  • 如果将数据从较早版本数据库服务器移动到新版本的数据库服务器,则可能会发生预料之外的结果。一些配置参数或环境变量被弃用,或者它们的缺省值被更改。例如,假定在原始数据库中缺省创建了附加索引。在当前版本的数据库服务器中,会缺省创建分离索引。如果您需要维持原始的行为。可以在运行 dbimport 实用程序之前将 DEFAULT_ATTACH 环境变量设置为 1 。

适用于以下情况的要求和限制:

压缩数据

dbexport 实用程序会解压压缩的数据。您必须在使用 dbimport 实用程序导入数据后重新压缩这些数据。

日期值

日期值使用四位数记年。对象的日期上下文包含创建对象的日期、DBCENTURY 和 GL_DATE环境变量的值以及一些其他的环境变量。如果导入期间的日期上下文与创建这些对象时的上下文不同,您可能会得到显式的错误,或无法找到您的数据,或检查约束不像期望的那样工作。

提示

缺省情况下,dbexport 以四位数记年法导出日期,除非环境变量被设置为可以覆盖那些格式的值。

高可用集群

不能在 HAC辅助服务器或共享磁盘(SSC)辅助服务器上使用 dbexport 实用程序。所有的可更新的辅助服务器上都支持 dbimport 实用程序。

基于标签的访问控制(LBAC)

当导出 LBAC 保护的数据时,限制导出的数据为 LBAC 证书允许您读取的数据。如果 LBAC 证书不允许您读取一行,则该行不能导出,并且不会返回错误。要导出所有的行,您必须可以查看到这些行。

NLSCASE 模式

无论您的源数据库的 NLSCASE 模式是 SENSITIVE 还是 INSENSITIVE,可以通过始终迁移到与源数据库相同 NLSCASE 模式的目标数据库,来降低区分大小写问题的风险。对于包含具有大小写变化的 NCHARNVARCHAR 数据值(例如,“GBASE”、“gbase”或“Gbase”)列的表,在迁移后可能遇到以下不同:

  • 与迁移前的相同查询的结果相比,ORDER BY 和排序操作可以在查询结果中对符合条件的行产生不同的排序。
  • 如果任何索引或约束键列包含同一字符串的大小写变体形式,则在迁移之前符合唯一索引和参照约束的数据可能会在新数据库中具有完整性冲突。
  • 使用条件运算符应用于 NCHAR 或 NVARCHAR 值的查询可能会在迁移后返回不同结果。

非缺省的数据库语言环境

如果数据库使用非缺省的语言环境并且 GL_DATETIME 环境变量具有非缺省设置,那么必须将 USE_DTENV 环境变量的值设置为值 1,然后才能使用 dbexportdbimport 实用程序正确处理本地化的 DATETIME 值。

表上的 select 触发器

在使用 dbexport 实用程序导出数据库之前,必须禁用 SELECT 触发器。dbexport 实用程序在导出期间会运行 SELECT 语句。该 SELECT 语句触发器可能会修改数据库内容。

虚拟表

dbexport实用程序不支持虚拟表。

支持DATABASE.OBJECT之后

dbexpor/dbimport执行导出操作时,数据库对象名前缀不再增加owner.object,如果需要导出的数据库中存在ORACLE模式下创建的包、存储过程、函数等数据库对象,导出文件中会增加库名_ora.sql脚本专门用于保存以上数据库对象;其他导出文件保持不变。执行导入操作时,如果存在库名_ora.sql脚本文件,会自动增加ORACLE模式下创建的包、存储过程、函数等数据库对象的导入。

dbexpor/dbimport导出导入工具使用方法保持不变。执行导出操作时,如果需要导出在ORACLE模式下创建的如表、视图、同义词、索引、物化视图、存储过程等数据库对象,对应内容会导出在 库名_ora.sql脚本 专门用于保存Oracle模式数据库对象;gbase 模式下,导出文件保持不变。执行导入操作时,如果存在 库名_ora.sql脚本文件,会自动增加ORACLE模式下创建的对象导入。

注意

如有Oracle兼容需求,请保持在 Oracle 模式下使用。

如存在gbase模式下创建如视图、触发器,但基表为Oracle 模式下创建等情况。导入场景由于优先导入gbase脚本,可能报错对象不存在。

dbexport 命令的语法

dbexport 命令将数据库卸载到文本文件,以便以后将这些文本文件导入到另一个数据库中。该命令还可以创建模式文件。

元素用途重要注意事项
-c使 dbexport 完成导出,除非发生致命错误参考:有关此选项的详细信息,请参阅 dbexport 错误
-d使 dbexport 只导出简单大对象描述符,不导出简单大对象数据
-q隐藏错误消息、警告和生成的 SQL 数据定义语句的显示无。
-ss对指定数据库中的所有表生成特定于数据库服务器的信息参考:有关此选项的详细信息,请参阅 dbexport 特定于服务器的信息
-si为非分段表排除索引存储子句的生成 -si 选项仅在与 -ss 选项一起使用时才可用。参考:有关此选项的详细信息,请参阅 dbexport 特定于服务器的信息
-no-data-tables仅导出指定表的定义,不为指定的表导出数据。接受以逗号分隔的表的名称列表,这些表的数据将不会被导出。
-no-data-tablesaccessmethods防止使用指定的访问方法卸载数据。接收以逗号分隔的访问方法的名称列表。不会卸载使用这些访问的表。
-X识别字符字段中的 HEX 二进制数据无。
-nw生成用于在未指定所有者的情况下创建数据库的 SQL无。
-V显示软件版本号和序列号无。
-version扩展 -V 选项以显示有关构建操作系统、构建号和构建日期的其他信息无。
database指定希望导出的数据库的名称其他信息:如果语言环境设置为使用多字节字符,那么可对数据库名称使用多字节字符。
-l指定数据库在线导出时不用锁定数据库此参数会按照脏读隔离级别导出指定数据库

您必须具有 DBA 特权或以用户 gbasedbt 的身份登录才能导出数据库。

可以设置 IFX_UNLOAD_EILSEQ_MODE 环境变量来支持 dbexport 使用对于环境中指定的语言环境无效的字符数据。

可将定界标识用于 dbexport 实用程序。该实用程序会检测诸如关键字、混合大小写或具有特殊字符的数据库对象,并且实用程序还在它们周围括上双引号。

除了数据文件和模式文件,dbexport 会在当前目录中创建名为 dbexport.out 的消息文件。此文件包含错误消息、警告以及它生成的 SQL 数据定义语句的显示。也会将相同的信息打印至标准输出,除非指定了 -q 选项。

导出期间,数据库将锁定为独占模式。如果 dbexport 无法获得排他锁,它将显示相关消息并退出。此时需要指定 -l 选项。

提示

dbexport 实用程序可创建大于 2 GB 的文件。要支持这样大的文件,请确保操作系统文件大小限制设置得足够高。例如:在 UNIX™ 上,将 ulimit 设置为不受限制。

示例

以下命令将在不指定所有者的情况下,为 customer 数据库生成模式和数据:

dbexport customer –nw

示例

以下命令将按照脏读隔离级别导出指定数据库,在/work/exports目录下生成 customer.exp 目录:

dbexport -c -l customer

终止 dbexport 实用程序

您可以随时停止 dbexport 实用程序。

要取消 dbexport,请按中断键。

dbexport 实用程序在其终止前会请求确认。

dbexport 错误

dbexport -c 选项使 dbexport 完成导出,除非发生致命错误。

即使您使用了 -c 选项,如果发生以下任一致命错误,dbexport 仍会中断处理:

  • dbexport 无法打开指定的磁带。
  • dbexport 找到磁带或磁盘的坏写。
  • 已使用的命令参数无效。
  • dbexport 无法打开数据库,或者没有执行此操作的权限。
  • 在执行期间指定名称的子目录已存在。

dbexport 特定于服务器的信息

dbexport -ss 选项生成特定于服务器的信息。此选项指定最初扩展数据块和下一扩展数据块的大小、分段存储信息(如果表被分段)、锁定方式、表的数据库空间、任何简单大对象的数据库空间以及任何智能大对象的数据库空间。

dbexport -si 选项(仅与 -ss 选项一起使用)不会为非分段表生成索引存储子句。

dbexport 目标选项

dbexport 实用程序支持磁盘和磁带目标选项。

元素用途重要注意事项
-b blocksize指定磁带设备的块大小(以千字节计)无。
-f pathname指定希望存储模式文件的路径名(如果要在磁带上存储数据文件)其他信息: 路径名可以是完整的路径名或文件名。如果只给出文件名,那么文件将存储在当前目录中。
-o directory指定磁盘上的目录,dbexport 将在该目录中创建database.exp 目录。 该目录保留 dbexport 为数据库创建的数据文件和模式文件。限制: 指定为目录名的目录必须存在。
-s tapesize指定您可在磁带上存储的数据量(以千字节计)其他信息: 要写到磁带的末尾,请将tapesize 指定为 0。 如果您不指定 0,那么最大tapesize 是 2 097 151 KB。
-t device指定您希望存储文本文件和可能存储模式文件的磁带设备路径名。-t 选项不允许您指定远程磁带设备。

写到磁盘时,dbexport 将在 -o 选项指定的目录中创建 database.exp 子目录。 dbexport 实用程序为数据库中的每个表创建带 .unl 扩展名的文件。模式文件写入文件 database.sql。 .unl.sql 文件位于 database.exp 目录中。

如果没有为数据和模式文件指定目标,将把子目录 database.exp 放置在当前工作目录中。

将数据文件写入磁带时,可以使用 -f 选项将模式文件存储到磁盘。不需要将模式文件命名为 database.sql。您可任意取名。

仅 UNIX/Linux

以下命令将数据库 stores_demo 导出到磁带,该磁带的块大小为 16 KB 且容量为 24000 KB。该命令还可以将模式文件写入到 /tmp/stores_demo.imp

dbexport -t /dev/rmt0 -b 16 -s 24000 -f /tmp/stores_demo.imp storstores_demo

以下命令将同一 stores_demo 数据库导出到名为**/work/exports/stores_demo.exp** 的目录。结果模式文件为**/work/exports/stores_demo.exp/stores_demo.sql**。

dbexport -o /work/exports stores_demo

dbexport 创建的模式文件的内容

dbexport 实用程序可以创建模式文件。此文件包含您重新创建导出的数据库所需要的 SQL 语句。

您可编辑该模式文件以修改数据库的模式。

如果使用 -ss 选项,那么模式文件将包含特定于服务器的信息,例如最初和下一扩展数据块的大小、分段存储信息、锁定方式、每个表驻留的数据库空间、每个简单大对象列驻留的数据库空间以及智能大对象的数据库空间。不会保留以下信息:

  • 数据库的日志记录方式

    有关日志记录方式的信息,请参阅《GBase 8s SQL 指南:参考》。

  • SERIAL 列的起始值

模式文件中的语句,这些语句创建表、视图、索引、分区段表、索引和角色,授予最初创建数据库的用户名称执行这些操作的特权。使用这种方法,原所有者将保留数据库的 DBA 特权并成为所有表、索引和视图的所有者。另外,执行 dbimport 命令的用户也将具有数据库的 DBA 特权。

dbexport 创建的模式文件包含以括号包围的注释,注释包含有关表中的行、列、索引数的信息以及有关卸载文件的信息。dbimport 实用程序使用这些注释中的信息来装入数据库。

卸载文件中的行数必须匹配模式文件中对应的卸载行数。如果在卸载文件中更改了行数而没有更改模式文件中的行数,将发生不匹配。

注意

不要删除模式文件中的任何注释,不要更改现有注释或添加任何新注释。如果您更改或添加新注释,dbimport 实用程序可能停止或产生不可预测的的结果。

如果从卸载文件中删除了行,请使用卸载文件中正确的行数更新模式文件中的注释。然后,dbimport 将成功执行。

dbimport 命令的语法

dbimport 命令将先前导出的数据导入到另一个数据库。

元素用途重要注意事项
-c即使出现某些非致命错误,也可以完成数据导入。参考:有关更多信息,请参阅 dbimport 错误和警告
-D如果未在 CREATE TABLE 语句中指定扩展区大小,请在导入操作期间为第一个和后续扩展区指定 16 KB 的缺省扩展区大小。如果在 CREATE TABLE 语句中指定了扩展区大小,则忽略此选项。
缺省值有助于确保在导入操作指定的 dbspace 中有足够的空间可用。此选项可防止在导入操作期间自动计算扩展区的大小,并且在以下情况下尤其有用:
导入包含具有大的最大行大小的列的表时,如 LVARCHAR 列。
在没有 -ss 选项的情况下运行 dbexport 命令后导入数据时,-ss 选项指定有关 extent 大小的服务器特定信息。
-nv当 dbimport -nv 命令正在运行时,不会检查 ALTER TABLE ADD CONSTRAINT 在启用或过滤模式下创建的具有外键约束的表是否违规,就像您还指定了 NOVALIDATE 一样。通过绕过对引用约束的检查,此选项可以减少已经符合其外键约束的非常大的表的迁移时间。在 ALTER TABLE ADD CONSTRAINT 语句完成后,NOVALIDATE 模式不会持续。
-q隐藏错误消息、警告和生成的 SQL 数据定义语句的显示无。
-V显示软件版本号和序列号无。
-version扩展 -V 选项以显示有关构建操作系统、构建号和构建日期的其他信息无。
-X识别字符字段中的 HEX 二进制数据无。
database声明要创建的数据库的名称其他信息:如果希望使用比数据库的简单名称更多的内容,请参阅《GBase 8s SQL 指南:语法》中的『数据库名称』一节。

dbimport 实用程序可使用来自以下位置选项的文件:

  • 位于磁盘上的所有输入文件。
  • 位于磁带上的所有输入文件。
  • 位于磁盘上的模式文件以及位于磁带上的数据文件。
要点

不要在您的输入文件中放置注释。当 dbimport 实用程序读取注释时可能导致无法预料的结果。

dbimport 实用程序针对导入的 GBase 8s 数据库服务器(排除 SE)支持以下任务:

  • 指定数据库将驻留的数据库空间
  • 创建具有无缓冲日志记录的符合 ANSI 的数据库
  • 创建支持显式事务的数据库(具有缓冲或无缓冲日志记录)
  • 创建未记录的数据库
  • 通过用于 NCHAR 和 NVARCHAR 字符串的 NLS 不区分大小写属性创建数据库。

运行 dbimport 的用户被授予对新创建的数据库的 DBA 特权。dbimport 进程在装入每个表时将锁定该表并在完成装入时解锁该表。

要点

Global Language Support:当 GLS 环境变量正确设置时,如《GBase 8s GLS 用户指南》所述,dbimport 可以将数据导入到支持 GLS 的数据库服务器版本。

终止 dbimport 实用程序

您可以随时停止 dbimport 实用程序。

要取消 dbimport 实用程序,请按中断键。

dbimport 实用程序在其终止前会请求确认。

dbimport 错误和警告

dbimport -c 选项使 dbimport 实用程序完成导出,除非发生致命错误。

如果在 dbimport 命令中包含 -c 选项,那么 dbimport 忽略以下错误:

  • 包含太多列的数据行
  • 不能在表上放置锁
  • 不能释放锁

即使您使用了 -c 选项,如果发生以下任一致命错误,dbimport 仍会中断进程:

  • 无法打开指定的磁带设备
  • 到磁带或磁盘的坏写
  • 无效的命令参数
  • 无法打开数据库或无系统许可权
  • 无法转换数据

dbimport 实用程序在当前目录中创建名为 dbimport.out 的消息文件。此文件包含与 dbimport 处理有关的任何错误消息和警告。相同的消息也会写到标准输出,除非您指定 -q 选项。

dbimport 输入文件位置选项

输入文件的位置指定 database.exp 目录的位置,该位置包含 dbimport 实用程序将导入的文件。

如果未指定输入文件的位置,dbimport 将在当前目录下的 database.exp 目录中搜索数据文件并在 database.exp/database.sql 中搜索模式文件。

元素用途重要注意事项
-b blocksize指定磁带设备的块大小(以千字节计)如果正从磁带导入,那么必须使用与导出数据库时使用的相同块大小。
-f pathname指定 dbimport 可在何处找到用于输入的模式文件,该文件用来在从磁带读取数据文件时创建数据库其他信息: 如果使用 -f 选项来导出数据库,通常应使用与 dbexport 命令中指定的同一路径名。如果您只指定文件名,dbimport 将在当前目录的 .exp 子目录中查找文件。
-i directory指定磁盘上 database.exp 目录的完整路径名,该目录中包含 dbimport 用来创建和装入新数据库的输入数据文件和模式文件。目录名必须与数据库名相同。其他信息: 此目录必须与您使用 dbexport -o 选项指定的目录相同。如果更改了目录名,那么还要重命名数据库。
-s tapesize指定您可在磁带上存储的数据量(以千字节计)其他信息: 要读取到磁带的末尾,请指定磁带大小为 0
如果正从磁带导入,那么必须使用与导出数据库时使用的相同磁带大小。如果未将 tapesize 指定为 0,那么最大的 tapesize 是 2097151 KB。
-t device指定包含输入文件的磁带设备的路径名-t 选项不允许您指定远程磁带设备。

在 UNIX™ 或 Linux™ 上显示输入文件位置的示例

要从块大小为 16 KB 且容量为 24 000 KB 的磁带导入 stores_demo 数据库,请发出以下命令:

dbimport -c  -t /dev/rmt0 -b 16 -s 24000 -f /tmp/stores_demo.imp stores_demo

/tmp/stores_demo.imp 读取模式文件。

要从 /work/exports 目录下的 stores_demo.exp 目录导入 stores_demo 数据库,请发出以下命令:

dbimport -c -i /work/exports stores_demo

模式文件假定为 /work/exports/stores_demo.exp/stores_demo.sql

dbimport 创建选项

dbimport 实用程序支持创建数据库、为该数据库指定数据库空间、定义日志记录以及将 ANSI/ISO 合规性和 NLS 不区分大小写指定为数据库属性的选项。

元素用途重要注意事项
-ansi创建符合 ANSI/ISO 的数据库,在该数据库中对事务日志记录启用 ANSI/ISO 规则。否则,缺省情况下数据库使用显式事务。如果省略 -ansi 选项,数据库将使用显式事务。
其他信息: 有关符合 ANSI/ISO 的数据库的更多信息,请参阅《GBase 8s SQL 指南:参考》。
-ci指定 NLS 不区分大小写的属性。否则,缺省情况下数据库区分大小写。其他信息: 请参阅《GBase 8s SQL 指南:语法》和《GBase 8s SQL 指南:参考》中 NLS 不区分大小写的属性的描述。
-d dbspace指定要创建数据库的数据库空间。如果省略此元素,缺省位置为根数据库空间
-l为导入的数据库建立无缓冲的事务日志记录。如果省略 -l 标志,将不对数据库进行日志记录。参考: 有关更多信息,请参阅数据库日志记录方式
-l buffered为导入的数据库建立缓冲事务日志记录。如果包含 -l 而省略 buffered,数据库会使用无缓冲日志记录。参考: 有关更多信息,请参阅数据库日志记录方式

如果在数据库服务器中创建了分区的表或索引分段,那么在导入单个数据库空间包含多个分区的数据库时必须使用包含分区名称的语法。有关语法的详细信息,请参阅《GBase 8s SQL 指南:语法》。

显示 dbimport 创建选项的示例(UNIX™ 或 Linux™)

要从 /usr/gbasedbt/port/stores_demo.exp 目录导入 stores_demo 数据库,请发出以下命令,新数据库符合 ANSI/ISO:

dbimport -c stores_demo -i /usr/gbasedbt/port -l -ansi

下一个示例以类似方式从 /usr/gbasedbt/port/stores_demo.exp 目录导入 stores_demo 数据库。 导入的数据库使用缓冲事务日志记录和显式事务。-ci 标志指定在查询中以及在对数据类型为 NCHAR 和 NVARCHAR 的列和字符串执行的操作中不区分大小写:

dbimport -c stores_demo -i /usr/gbasedbt/port -l buffered -ci

数据库属性的 -ansi-ci 选项不是互斥的。可以指定符合 ANSI/ISO 且同时满足 NLS 不区分大小写的条件的数据库,如以下 dbimport 命令示例中所示:

dbimport -c stores_demo -i /usr/gbasedbt/port -l -ansi -ci

数据库日志记录方式

因为模式文件中未保留日志记录方式,所以您可以在使用 dbimport 实用程序导入数据库时指定日志记录信息。

使用 dbimport 时,您可以指定以下任何日志记录选项:

  • 具有无缓冲日志记录的符合 ANSI 的数据库
  • 无缓冲日志记录
  • 缓冲日志记录
  • 无日志记录

-l 选项与 CREATE DATABASE 语句的日志记录子句等价,如下所示:

  • 省略任何 -l 选项相当于省略 WITH LOG 子句。
  • -l 选项与 WITH LOG 子句等价。
  • -l buffered 选项与 WITH BUFFERED LOG 等价。
  • -l -ansi 选项相当于 WITH LOG MODE ANSI 子句,并表示无缓冲日志记录。

数据库重命名

dbimport 实用程序赋予新数据库与导出的数据库相同的名称。如果将数据库导出到磁带,当使用 dbimport 导入时无法更改其名称。如果将数据库导出到磁盘,那么可更改数据库名称。

您可以使用 RENAME DATABASE 语句来更改数据库名称。

更改数据库名称的方法

以下示例显示更改数据库名称的方法。

在此示例中,假设 dbexport 将数据库 stores_demo 卸载到目录 /work/exports/stores_demo.exp 中。因此,数据文件(.unl 文件)存储在 /work/exports/stores_demo.exp,而模式文件是 /work/exports/stores_demo.exp/stores_demo.sql

要在 UNIX™ 或 Linux™ 上将数据库名称更改为新名称:

  1. 更改 .exp 目录的名称。即,将 /work/exports/stores_demo.exp 更改为 /work/exports/newname.exp
  2. 更改模式文件名称。即,将 /work/exports/stores_demo.exp/stores_demo.sql 更改为 /work/exports/stores_demo.exp/newname.sql。 请不要更改 .unl 文件的名称。
  3. 使用以下命令导入数据库:
dbimport -i /work/exports newname

使用 dbimport 更改数据库语言环境

您可以使用 dbimport 实用程序更改数据库的语言环境。

要更改数据库的语言环境:

  1. DB_LOCALE 语言环境设置为当前数据库语言环境的名称。
  2. 在数据库上运行 dbexport
  3. 使用 DROP DATABASE 语句删除具有当前语言环境名称的数据库。
  4. DB_LOCALE 环境变量设置为该数据库的期望的语言环境。
  5. 运行 dbimport,以创建带有期望的语言环境的新数据库并将数据导入此数据库。

简单大对象

dbimportdbexport 和 DB-Access 实用程序处理简单大对象数据时,它们为该数据在临时目录中创建临时文件。

从包含简单大对象的表导出或导入数据前,您必须有以下各项之一:

  • 当前活动驱动器上的 \tmp 目录
  • DBTEMP 环境变量设置为指向可用于临时存储简单大对象的目录
注意

如果表在列中有 CLOB 或 BLOB,您将无法使用 dbexport 将表导出到磁带。如果表在列中具有用户定义的类型,使用 dbexport 将表导出到磁带可能产生无法预料的结果。导出的 CLOB 大小以十六进制格式存储在卸载文件中。